<?php
class TorneosController extends AppController {

	var $name = 'Torneos';
	var $helpers = array('Html', 'Form', 'Ajax', 'Javascript','chat.AjaxChat');
	var $components = array('RequestHandler');
	
	var $hora=array(1=>'Manhana','Tarde','Noche');
	var $nivelJuego=array(1 =>'Nivel 1','Nivel2','Nivel3');
	var $maxPlayers=array(1 =>1,2,3,4,5,6);
	
	function beforeFilter() {
		parent::beforeFilter(); 
		$this->Auth->allowedActions = array('index','view');
	}
	
	function index() {
		$this->Torneo->recursive = 0;
		//Traer todos los torneos habilitados
		$this->set('torneos', $this->paginate('Torneo', array('Torneo.estado >' => 0, 'Torneo.estado <' =>10)));
		$torneoPertenezco=$this->Torneo->torneoPertenezco($this->Auth->user('user'));
		//print_r($torneoPertenezco);
		$this->set('torneoPertenezco', $torneoPertenezco);
		$equipo=$this->Torneo->Equipo->find('first', array('conditions'=>array('Equipo.user_id'=>$this->Auth->user('user'))));
		$this->set('myTorneo', $equipo['Equipo']['torneo_id']);
		$this->set('usuario', $this->Auth->user());
		$this->set('grupo_id', $this->Auth->user('grupo_id'));//el grupo del user
		if($this->Auth->user()){// Para el chat
			$user=array('user'=>$this->Auth->user('user'),'grupo_id'=>$this->Auth->user('grupo_id'),'username'=>$this->Auth->user('username'));
		}else{
			$user=null;	
		}
		$this->set('user',$user);
	}

	function view($id = null) {
		if (!$id) {
			$this->flash(__('Torneo Invalido', true), array('action'=>'index'));
		}
		$torneo=$this->Torneo->read(null, $id);
		if (!$torneo) {
			$this->flash(__('Torneo Invalido', true), array('action'=>'index'));
		}
		$this->set('torneo', $torneo);
		
		$equipos = $this->Torneo->equipos_torneo_actual($id);
		$this->Torneo->saveField('cantequipos', count($equipos));
		//Controlar si el usuario está inscripto en ese torneo
		/*$torneo_del_usuario = 0;
		for($i=0; $i<count($equipos); $i++){
			if($equipos[$i]['Equipo']['user_id'] == $this->Auth->user('user')){
				$torneo_del_usuario = 1;
				break;
			}
		}
		if (!$torneo_del_usuario) {
			$this->Session->setFlash(__('No estas inscripto en este torneo', true));
			$this->redirect(array('controller' => 'torneos','action'=>'index'));
		}*/
		//print_r($this->Torneo->Partido->partidosDeTorneo($torneo['Torneo']['torneo'], $this->Auth->user('user')));
		$this->set('torneoPartidos',$this->Torneo->Partido->find('all', array('conditions'=>array('Partido.torneo_id'=>$torneo['Torneo']['torneo'], 'Partido.estado <'=>10))));
		$this->set('misPartidos',$this->Torneo->Partido->partidosDeTorneo($torneo['Torneo']['torneo'], $this->Auth->user('user')));
		$this->set('usuario', ClassRegistry::init('User')->findByUser($this->Auth->user('user')));
		$this->set('tabla_posiciones',$this->Torneo->tabla_posiciones($id));
		$this->set('equipos_torneo_actual',$this->Torneo->equipos_torneo_actual($id));
		

		//para el menu
		$this->set('grupo_id', $this->Auth->user('grupo_id'));//el grupo del user
		if($this->Auth->user()){// Para el chat
			$user=array('user'=>$this->Auth->user('user'),'grupo_id'=>$this->Auth->user('grupo_id'),'username'=>$this->Auth->user('username'));
		}else{
			$user=null;	
		}
		$this->set('user',$user);
	}
	
/*Controlado por ACL. A partir de premium
Se envia la invitacion al duenho y el duenho del equipo debe aceptar el torneo para poder participar.
*/
	function aceptoTorneo($torneoId){
		if(!$torneoId){
			$this->Session->setFlash(__('Torneo invalido', true));
			$this->redirect(array('controller'=> 'torneos','action'=>'index'));
		}
		$torneo=$this->Torneo->findByTorneo($torneoId);
		if(!$torneo){
			$this->Session->setFlash(__('El torneo no existe', true));
			$this->redirect(array('controller'=> 'torneos','action'=>'index'));
		}
		if($torneo['Torneo']['estado']!=1){ //si el torneo a unirse ya empezo o finalizo.. etc
			$this->Session->setFlash(__('El torneo ya no esta habilitado para ser ingresado', true));
			$this->redirect(array('controller'=> 'torneos','action'=>'index'));
		}
		if($torneo['Torneo']['cantequipos']>=$torneo['Torneo']['maxequipos']){
			$this->Session->setFlash(__('No puede unirse al torneo. El torneo ya se ha completado', true));
			$this->redirect(array('controller'=> 'torneos','action'=>'index'));
		}
		$usuario=ClassRegistry::init('User')->findByUser($this->Auth->user('user'));
		if(!$usuario['User']['equipo_id']){
			$this->Session->setFlash(__('Debe poseer un equipo para participar en un torneo', true));
			$this->redirect(array('controller'=> 'torneos','action'=>'index'));
		}
		if($usuario['Equipo']['user_id']!=$usuario['User']['user']){ //si el usuario no es duenho del equipo
			$this->Session->setFlash(__('Debe ser duenho del equipo para aceptar la invitacion', true));
			$this->redirect(array('controller'=> 'torneos','action'=>'index'));
		}
		if($usuario['Equipo']['torneo_id']==$torneoId){
			$this->Session->setFlash(__('Usted ya se unio al torneo', true));
			$this->redirect(array('controller'=> 'torneos','action'=>'index'));
		}
		$mensaje=ClassRegistry::init('Mensaje')->find('first',array('conditions'=>array('Mensaje.localidad'=>$torneoId, 'Mensaje.destino'=>$usuario['Equipo']['user_id'], 'Mensaje.tipo'=> 4)));
		if(!$mensaje){
			$this->Session->setFlash(__('Lo sentimos. No fue invitado al torneo.', true));
			$this->redirect(array('controller'=> 'torneos','action'=>'index'));
		}else{//recibio invitacion y se el equipo se une al torneo
			$this->Torneo->Equipo->id=$usuario['User']['equipo_id'];
			if($this->Torneo->Equipo->saveField('torneo_id',$torneoId)){
				//se aumenta la cantidad de equipos que se unieron al torneo
				$this->Torneo->id=$torneo['Torneo']['torneo'];
				$this->Torneo->saveField('cantequipos',$torneo['Torneo']['cantequipos']+1);
				$this->Session->setFlash(__('Se unio al Torneo '.$torneo['Torneo']['nombre'], true));
				$this->redirect(array('action'=>'index'));
			}else{
				$this->Session->setFlash(__('No se unio al Torneo'.$torneo['Torneo']['nombre'].' Intente de vuelta.', true));
				$this->redirect(array('action'=>'listar'));
			}
		}
	}

/*Solo administrador*/
	function add() {
		if (!empty($this->data)) {
			$torneo=$this->Torneo->find('first',array('conditions'=>array('Torneo.estado <'=> 10,'Torneo.nombre'=> $this->data['Torneo']['nombre'])));
			if($torneo){
				$this->Session->setFlash(__('Existe un torneo activo con el mismo nombre. Por favor cambie de nombre', true));
				$this->data['Torneo']['nombre']='';
			}else{
				$this->data['Torneo']['estado']=1;
				$this->Torneo->create();
				if ($this->Torneo->save($this->data)) {
					$torneo=$this->Torneo->find('first',array('conditions'=>array('Torneo.estado <'=> 10,'Torneo.nombre'=> $this->data['Torneo']['nombre'])));
					//enviamos las invitaciones al torneo
					$this->requestAction('/mensajes/addInvitacionesTorneo/'.$torneo['Torneo']['torneo']);
					
					$this->Session->setFlash(__('El torneo ha sido creado', true));
					$this->redirect(array('controller' => 'torneos','action'=>'index'));
				} else {
					$this->Session->setFlash(__('No se creo el torneo. Intente de vuelta.', true));
				}
			}
		}
		$this->set('maxPlayers', $this->maxPlayers);
		$this->set('nivelJuego', $this->nivelJuego);
		$this->set('niveles', $this->Torneo->Nivel->find('list', array('fields'=>'Nivel.nombre', 'conditions'=>array('Nivel.tiposala >'=>2))));
		$this->set('hora', $this->hora);
		
	}

/*Solo Administrador*/
	function edit($id = null) {
		if (!$id && empty($this->data)) {
			$this->flash(__('Invalid Torneo', true), array('action'=>'index'));
		}
		$torneo=$this->Torneo->findByTorneo($id);
		if($torneo['Torneo']['cantequipos']==0){
			if (!empty($this->data)) {
				if ($this->Torneo->save($this->data)) {
					$this->flash(__('The Torneo has been saved.', true), array('action'=>'index'));
				} else {
				}
			}
			if (empty($this->data)) {
				$this->data = $this->Torneo->read(null, $id);
			}
		}else{
			$this->Session->setFlash(__('El torneo no puede ser modificado', true));
			$this->redirect(array('action'=>'index'));
		}
	}

/*Controlado por Acl. A partir de premium*/	
	function salir(){
		$user=ClassRegistry::init('User')->find($this->Auth->user('user'));
		if(!$user['User']['equipo_id']){//si el usuario posee equipo
			$this->Session->setFlash(__('Usted no posee equipo.', true));
			$this->redirect(array('action'=>'index'));
		}
		$equipo=$this->Torneo->Equipo->findByEquipo($user['User']['equipo_id']);
		if(!$equipo){//si el equipo existe
			$this->Session->setFlash(__('Usted no posee equipo.', true));
			$this->redirect(array('action'=>'index'));
		}
		if(!$equipo['Equipo']['torneo_id']){ // si no esta inscripto en un torneo
			$this->Session->setFlash(__('No esta inscripto en un torneo', true));
			$this->redirect(array('action'=>'index'));
		}
		if($equipo['Equipo']['user_id']==$this->Auth->user('user')){ //si el user q desea salir es el duenho
			$torneo=$this->Torneo->findByTorneo($equipo['Equipo']['torneo_id']);
			if(!$torneo){ //si el torneo existe
				$this->Session->setFlash(__('El torneo no existe', true));
				$this->redirect(array('action'=>'index'));
			}
			if($torneo['Torneo']['estado']!=1){
				$this->Session->setFlash(__('No puede salir del Torneo. Ha empezado o ya no es valido', true));
				$this->redirect(array('action'=>'index'));
			}
			$this->Torneo->Equipo->id=$equipo['Equipo']['equipo']; // se pone nul el torneo_id
			if($this->Torneo->Equipo->saveField('torneo_id', null)){
				$this->Torneo->id=$torneo['Torneo']['torneo']; //se disminuye la cantidad de equipos en el torneo
				$this->Torneo->saveField('cantequipos',$torneo['Torneo']['cantequipos']-1);
				$this->Session->setFlash(__('Ha salido del torneo'.$torneo['Torneo']['nombre'], true));
				$this->redirect(array('action'=>'index'));
			}else{
				$this->Session->setFlash(__('No pudo salir del torneo. Intente de vuelta', true));
				$this->redirect(array('action'=>'index'));
			}
		}else{ // si solo pertenece a un equipo
			$this->Session->setFlash(__('No puede salir del torneo. Solo el duenho puede salir del torneo', true));
			$this->redirect(array('action'=>'index'));
		}
	}


	function estadisticaGeneral($tipo=1){
		if($tipo==1){
			$torneos=$this->Torneo->topPorcentajeWinners(1);
			$this->set('titulo', "Top 30 torneos con mayor cantidad de equipos participados");
			$this->set('columna', "Equipos");
		}
		$this->set('tipo', $tipo);
		$this->set('torneos', $torneos);
		$this->render('show_estadistica');
	}
	
/*El duenho de un equipo elige los jugadores que participaran. a partir de Premium*/
	function configurar($partidoId, $torneoId){
		//se obtiene los datos del partido
		$partido=$this->Torneo->Partido->findByPartido($partidoId);
		if($partido){
			$user=ClassRegistry::init('User')->findbyUser($this->Auth->user('user'));
			$team=$this->Torneo->Equipo->find('first',array('conditions'=> array('Equipo.equipo'=>$user['User']['equipo_id'])));
			if($team){
				if($team['Equipo']['user_id']==$this->Auth->user('user')){ //si es duenho del equipo
					$cantJugadores=ClassRegistry::init('PartidosUser')->cantJugadoresEnPartido($this->Auth->user('user'),$partidoId);
					$torneo=$this->Torneo->findByTorneo($torneoId);
					if($cantJugadores < $torneo['Torneo']['maxjugadores']){ //cantJugadores le incluye al duenho del equipo
						//Se obtienen los jugadores del equipo del duenho.
						$usersEquipo=ClassRegistry::init('PartidosUser')->jugadoresAunNoInvitados($team['Equipo']['equipo'],$this->Auth->user('user'),$partido['Partido']['partido']);
						
						//$partidoUser=ClassRegistry::init('PartidosUser')->find('first',array('conditions'=>array('PartidosUser.partido_id'=>$partido['Partido']['partido'],'PartidosUser.user_id'=>$this->Auth->user('user'))));
						$usersInvitados=ClassRegistry::init('PartidosUser')->jugadoresInvitados($team['Equipo']['equipo'],$this->Auth->user('user'),$partido['Partido']['partido']);
						$this->set('usersInvitados', $usersInvitados);
						$this->set('torneo', $torneo);
						$this->set('usersEquipo', $usersEquipo);
						$this->set('usuario', $user);
						$this->set('miEquipo', $team);
						$this->set('partido', $partido);
						$this->Session->setFlash(__('Jugaran '.$torneo['Torneo']['maxjugadores'].' usuarios', true));
					}else{ //partido configurado
						//entonces se cambia el estado de cada jugador para que pueda jugar
						$partidoUser=ClassRegistry::init('PartidosUser')->find('first',array('conditions'=>array('PartidosUser.partido_id'=>$partido['Partido']['partido'],'PartidosUser.user_id'=>$this->Auth->user('user'))));
						$usersPartido=ClassRegistry::init('PartidosUser')->find('all',array('conditions'=>array('PartidosUser.partido_id'=>$partido['Partido']['partido'], 'PartidosUser.localvisitante'=>$partidoUser['PartidosUser']['localvisitante'])));
						foreach ($usersPartido as $userPartido){
							ClassRegistry::init('PartidosUser')->id = $userPartido['PartidosUser']['id'];
							ClassRegistry::init('PartidosUser')->saveField('estado',2);//Disponible para jugar
						}
						$this->Session->setFlash(__('Ya se ha configurado', true));
						$this->redirect(array('controller' => 'torneos', 'action' => 'view', $torneoId));
					}
				}else{
					$this->Session->setFlash(__('Debe ser duenho del equipo para configurar', true));
					$this->redirect(array('controller' => 'torneos', 'action' => 'view', $torneoId));	
				}
			}else{
				$this->Session->setFlash(__('No posee equipo como para ver los datos del mismo', true));
				$this->redirect(array('controller' => 'torneos', 'action' => 'view', $torneoId));
			}
		}else{
			$this->Session->setFlash(__('Este partido no le corresponde', true));
			$this->redirect(array('controller' => 'torneos', 'action' => 'view', $torneoId));
		}
	}

/*Funcion que registra los usuarios que jugaran con un duenho*/	
	function invitar($partidoId){
		if (!empty($this->data)) {
			$partido=$this->Torneo->Partido->findByPartido($partidoId);
			$cantJugadores=ClassRegistry::init('PartidosUser')->cantJugadoresEnPartido($this->Auth->user('user'),$partidoId);
			if($cantJugadores<0){
				$this->Session->setFlash(__('Lo sentimos, no puedo invitar', true));
				$this->redirect(array('action'=>'configurar',$partidoId,$torneo['Torneo']['torneo']));	
			}
			$torneo=$this->Torneo->findByTorneo($partido['Partido']['torneo_id']);
			//si aun no llego a la cantidad max de jugadores en el partido por equipo
			if($cantJugadores < $torneo['Torneo']['maxjugadores']){
				$ownerPartidosUser=ClassRegistry::init('PartidosUser')->find('first', array('conditions'=>array('PartidosUser.partido_id'=>$partidoId, 'PartidosUser.user_id'=>$this->Auth->user('user'))));
				$partidosUser = null;
				$partidosUser = array('user_id' => $this->data['user'],'partido_id' => $partidoId,'orden'=>$ownerPartidosUser['PartidosUser']['orden'],'estado' => 1,'localvisitante'=> $ownerPartidosUser['PartidosUser']['localvisitante'],'fechahora' => date('Y-m-d H:i:s'));
				ClassRegistry::init('PartidosUser')->create();
				if(ClassRegistry::init('PartidosUser')->save($partidosUser)){ //se inserta en la tabla partidos_user
					$this->Torneo->Partido->id=$partido['Partido']['partido'];
					$this->Torneo->Partido->saveField('cantusuarios',$partido['Partido']['cantusuarios']+1);
					$this->Session->setFlash(__('Se unio al partido', true));
					//$this->redirect(array('action'=>'configurar',$partidoId,$torneo['Torneo']['torneo']));
				}else{
					$this->Session->setFlash(__('No se unio al partido' , true));
					//$this->redirect(array('action'=>'configurar',$partidoId,$torneo['Torneo']['torneo']));
				}
			}else{
				$this->Session->setFlash(__('Ya no puede invitar a otros usuarios', true));
				$this->redirect(array('action'=>'configurar',$partidoId,$torneo['Torneo']['torneo']));
				//$this->redirect(array('controller' => 'torneos', 'action' => 'view', $torneoId));
			}
		}
	}

/*solo administrador controlado por acl*/	
	function delete($id = null) {
		if (!$id) {
			$this->flash(__('Invalid Torneo', true), array('action'=>'index'));
		}
		$torneo=$this->Torneo->findByTorneo($id);
		if($torneo['Torneo']['cantequipos']==0){
			if ($this->Torneo->del($id)) {
				$mensajes=ClassRegistry::init('Mensaje')->find('all', array('conditions'=>array('Mensaje.tipo'=>4, 'Mensaje.localidad'=>$id)));
				foreach($mensajes as $mensaje){
					ClassRegistry::init('Mensaje')->del($mensaje['Mensaje']['mensaje_id']);
				}
				$this->Session->setFlash(__('El torneo ha sido eliminado', true));
				$this->redirect(array('action'=>'index'));
			}
		}else{
			$this->Session->setFlash(__('El torneo no puede ser borrado', true));
			$this->redirect(array('action'=>'index'));
		}
	}

}
?>